.

iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
佛心分享-IT 人自學之術

C++探險家系列 第 25

Day 25 書籍借還系統專題製作

  • 分享至 

  • xImage
  •  

第一部分程式碼:

#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>

#define MaxNum 256

using namespace std;

typedef struct node {
    int i;        // 編號
    string name;  // 名稱
    int rentBy;   // 借借會員編號 -1 代表無人外借
} NODE;

class MEMBER {
public:
    MEMBER();
    bool exist(int);
    bool add(string);
    bool remove(int);
    void show();
    void readFile();
    void writeFile();
    
    friend class BOOK;  // BOOK會用到private資料,因此加入friend
    friend class DVD;   // DVD會用到private資料,因此加入friend

private:
    int index; // 紀錄陣列寫入位置
    string DataBase[MaxNum];
};

class BOOK {
public:
    BOOK();
    bool exist(int);
    bool add(string, int);
    bool remove(int);
    bool rent(int, int);
    bool back(int, int);
    void show(MEMBER);
    void readFile();
    void writeFile();

protected:
    int index; // 紀錄陣列寫入位置
    NODE DataBase[MaxNum];
};

class DVD : public BOOK {  // 繼承自BOOK
public:
    DVD();
    bool addDVD(string, int, int);
    void showDVD(MEMBER);
    void readFile();
    void writeFile();

private:
    int level[MaxNum];
};

說明:
MEMBER類別負責管理會員資料,提供新增、刪除和顯示功能;BOOK類別管理書籍的借閱和歸還,並可讀寫書籍資料;DVD類別繼承自BOOK,並擴展了DVD的等級管理功能。每個類別都有對應的資料成員和方法來維護其功能,並且使用friend關係讓類別之間能夠存取私有成員資料。

第二部分程式碼:

#include <iostream>
#include <string>
using namespace std;

class MEMBER {
public:
    void add(string name) {
        cout << "會員 " << name << " 已新增\n";
        // Add logic to store member
    }

    void remove(int memberID) {
        cout << "會員編號 " << memberID << " 已刪除\n";
        // Add logic to remove member
    }

    void show() {
        cout << "顯示所有會員資料\n";
        // Add logic to show member data
    }

    void writeFile() {
        cout << "會員資料已保存到文件\n";
        // Add logic to save member data to file
    }
};

class BOOK {
public:
    void add(string name, int bookID) {
        cout << "書籍 " << name << " 已新增\n";
        // Add logic to store book
    }

    void remove(int bookID) {
        cout << "書籍編號 " << bookID << " 已刪除\n";
        // Add logic to remove book
    }

    void rent(int memberID, int bookID) {
        cout << "會員 " << memberID << " 借閱了書籍編號 " << bookID << "\n";
        // Add logic to rent a book
    }

    void returnBook(int bookID) {
        cout << "書籍編號 " << bookID << " 已歸還\n";
        // Add logic to return the book
    }

    void show() {
        cout << "顯示所有書籍資料\n";
        // Add logic to show book data
    }

    void writeFile() {
        cout << "書籍資料已保存到文件\n";
        // Add logic to save book data to file
    }
};

class DVD {
public:
    void add(string name, int dvdID, int rating) {
        cout << "DVD " << name << " (分級: " << (rating == 1 ? "限制級" : "非限制級") << ") 已新增\n";
        // Add logic to store DVD
    }

    void remove(int dvdID) {
        cout << "DVD編號 " << dvdID << " 已刪除\n";
        // Add logic to remove DVD
    }

    void rent(int memberID, int dvdID) {
        cout << "會員 " << memberID << " 借閱了DVD編號 " << dvdID << "\n";
        // Add logic to rent a DVD
    }

    void returnDVD(int dvdID) {
        cout << "DVD編號 " << dvdID << " 已歸還\n";
        // Add logic to return the DVD
    }

    void show() {
        cout << "顯示所有DVD資料\n";
        // Add logic to show DVD data
    }

    void writeFile() {
        cout << "DVD資料已保存到文件\n";
        // Add logic to save DVD data to file
    }
};

int main() {
    int temp;
    string name;
    MEMBER member;
    BOOK book;
    DVD dvd;

    while (true) {
        cout << "要執行下面哪項動作?\n1)管理會員 2)管理書籍 3)管理DVD 4)離開\n";
        cin >> temp;

        if (temp == 4) {
            member.writeFile();
            book.writeFile();
            dvd.writeFile();
            cout << "程序已退出,所有資料已保存\n";
            break;
        }

        switch (temp) {
        case 1:
            cout << "會員管理選項:1)新增會員 2)刪除會員 3)顯示會員資料\n";
            cin >> temp;
            if (temp == 1) {
                cout << "請輸入會員名稱:\n";
                cin >> name;
                member.add(name);
            } else if (temp == 2) {
                cout << "請輸入會員編號:\n";
                cin >> temp;
                member.remove(temp);
            } else if (temp == 3) {
                member.show();
            }
            break;

        case 2:
            cout << "書籍管理選項:1)新增書籍 2)刪除書籍 3)借書 4)還書 5)顯示書籍資料\n";
            cin >> temp;
            if (temp == 1) {
                cout << "請輸入書籍名稱:\n";
                cin >> name;
                book.add(name, -1); // -1 as placeholder for bookID
            } else if (temp == 2) {
                cout << "請輸入書籍編號:\n";
                cin >> temp;
                book.remove(temp);
            } else if (temp == 3) {
                int bookNum;
                cout << "請輸入書籍編號:\n";
                cin >> bookNum;
                cout << "請輸入借書會員編號:\n";
                cin >> temp;
                book.rent(temp, bookNum);
            } else if (temp == 4) {
                cout << "請輸入書籍編號:\n";
                cin >> temp;
                book.returnBook(temp);
            } else if (temp == 5) {
                book.show();
            }
            break;

        case 3:
            cout << "DVD管理選項:1)新增DVD 2)刪除DVD 3)借DVD 4)還DVD 5)顯示DVD資料\n";
            cin >> temp;
            if (temp == 1) {
                int rating;
                cout << "請輸入DVD名稱:\n";
                cin >> name;
                cout << "請輸入DVD分級:0)非限制級 1)限制級\n";
                cin >> rating;
                dvd.add(name, -1, rating); // -1 as placeholder for dvdID
            } else if (temp == 2) {
                cout << "請輸入DVD編號:\n";
                cin >> temp;
                dvd.remove(temp);
            } else if (temp == 3) {
                int dvdNum;
                cout << "請輸入DVD編號:\n";
                cin >> dvdNum;
                cout << "請輸入借DVD會員編號:\n";
                cin >> temp;
                dvd.rent(temp, dvdNum);
            } else if (temp == 4) {
                cout << "請輸入DVD編號:\n";
                cin >> temp;
                dvd.returnDVD(temp);
            } else if (temp == 5) {
                dvd.show();
            }
            break;

        default:
            cout << "無效的選項,請重新選擇。\n";
            break;
        }
    }

    return 0;
}

說明:
設計了三個類別(MEMBERBOOKDVD),分別負責新增、刪除、顯示、借還物品等操作。主函式使用無限迴圈,讓使用者選擇操作選項,根據選擇的功能執行對應的操作,如新增會員或借還書籍、DVD。每個操作的數據在程式結束時透過 writeFile 方法保存。

!!以上內容是跟著第一次學C++就上手第二版跟著一起學習的!!
今天的程式碼因為中間有些執行上的問題所以最後有跟著書本上進行修改,希望未來幾天能順利!這次的專題製作會利用三天的時間分別把書籍借還系統給製作完畢,今天是第一、二部分。


上一篇
Day 24 電影問卷分析系統專題製作
下一篇
Day 26 書籍借還系統專題製作
系列文
C++探險家30
圖片
  直播研討會

尚未有邦友留言

立即登入留言